package com.xueyi.aixihu.service;

import com.xueyi.aixihu.entity.po.AxhFinanceReportCommunity;
import com.xueyi.aixihu.entity.po.AxhFinanceReportVillage;
import com.xueyi.aixihu.entity.vo.*;
import com.xueyi.aixihu.exception.SzException;
import com.xueyi.aixihu.reqeust.FinancePublicListReq;
import com.xueyi.aixihu.reqeust.FinanceReportReq;
import com.xueyi.aixihu.reqeust.FinanceReq;
import com.xueyi.aixihu.reqeust.base.PageLimitReq;
import com.xueyi.aixihu.response.DtOneFinanceLogRes;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * 描述 财务报表service
 *
 * @auther 俞烨
 * @date 2022-08-16 13
 */
public interface IFinanceReportService {

    /**
     * 通过Excel导入数据
     *
     * @param file
     */
    void importDataByExcel(MultipartFile file, Integer finacneType) throws IOException, SzException;

    /**
     * 查询报表各个状态的条数
     *
     * @param financeReq
     * @return
     */
    FinanceAuditSizeVo findFinanceAuditSize(FinanceReq financeReq);

    /**
     * 查询审批的列表
     *
     * @param financeReq
     * @return
     */
    List<FinanceAuditVo> findFinanceAuditList(FinanceReq financeReq) throws SzException;

    /**
     * 查询某个状态的数量
     *
     * @param financeReq
     * @return
     */
    Integer findFinanceSizeByStatus(FinanceReq financeReq) throws SzException;

    /**
     * 查询报表的日志信息
     *
     * @param id
     * @return
     */
    List<AxhAuditFinanceLogVo> findAuditFinanceLog(Integer id);

    /**
     * 查询财务报销的数量
     *
     * @param financeExpenseReq
     * @return
     */
    FinanceExpenseSizeVo findFinanceExpenseSizeVo(FinanceExpenseReq financeExpenseReq);

    /**
     * 查询报销的集合
     *
     * @param financeReq
     * @return
     */
    List<FinanceAuditVo> findFinanceExpenseList(FinanceReq financeReq);


    /**
     * 查询报销某个状态的数量
     *
     * @param financeReq
     * @return
     */
    Integer findFinanceExpenseSizeByStatus(FinanceReq financeReq) throws SzException;

    /**
     * 是否公开财务报表
     *
     * @param id
     * @param publicStatus
     */
    void updateFinancePublicStatus(Integer id, Integer publicStatus) throws SzException;

    /**
     * 提交财务报表进行审核
     *
     * @param id
     */
    void submitFinance(Integer id) throws SzException;

    /**
     * 审核对应的财务信息
     *
     * @param id
     * @param remark
     * @param auditType 1 同意 0拒绝
     * @throws SzException
     */
    void auditFinance(Integer id, String remark, Integer auditType) throws SzException;

    /**
     * 修改报表的基本信息
     *
     * @param financeTitle
     * @param month
     */
    void updateFinance(Integer id, String financeTitle, String month) throws SzException;

    /**
     * 查询报表的具体信息
     *
     * @param financeId
     * @return
     */
    FinanceDetailVo financeDetailVo(Integer financeId) throws SzException;

    /**
     * 删除或者恢复报表的信息
     *
     * @param id
     * @param status
     * @throws SzException
     */
    void delOrRecoverReport(Integer id, Integer status) throws SzException;

    /**
     * 修改报表的附件信息
     *
     * @param id
     * @param accessory
     */
    void uploadFinanceAccessory(Integer id, Integer lineId, String accessory) throws SzException;

    /**
     * 修改或者保存报表的某一张数据（社区）
     *
     * @param axhFinanceReportCommunity
     */
    void updateOrSaveFinanceLineCommunity(AxhFinanceReportCommunity axhFinanceReportCommunity) throws SzException;

    /**
     * 修改或者保存报表的某一张数据（村）
     *
     * @param axhFinanceReportVillage
     * @throws SzException
     */
    void updateOrSaveFinanceLineVillage(AxhFinanceReportVillage axhFinanceReportVillage) throws SzException;

    /***
     * 删除财务报表的某一行数据
     * @param financeId
     * @param lineId
     */
    void deleteFinanceLine(Integer financeId, Integer lineId) throws SzException;

    /**
     * 查询财务中心的总计信息
     *
     * @param req
     * @return
     */
    FinanceReportSizeVo findFinanceReportSizeVo(FinanceReportReq req);

    /**
     * 查询数据看板的信息
     *
     * @param req
     * @return
     */
    DataBlackListVo findDataBlackList(FinanceReportReq req);

    /**
     * 查询操作日志的信息
     *
     * @param req
     * @return
     */
    List<AxhAuditFinanceLogVo> findFinanceLogList(FinanceReportReq req);

    /**
     * 查询操作日志的信息
     *
     * @param
     * @return
     */
    DtOneFinanceLogRes findOneFinanceLogList(PageLimitReq pageLimitReq) throws SzException;

    /**
     * 数据分析的报表
     *
     * @param req
     * @return
     */
    List<FinanceFxEchartsVo> financeFxEchartsVo(FinanceReportReq req);

    /**
     * 首页账户的信息
     *
     * @return
     */
    IndexAccountDetail indexAccountDetail() throws SzException;

    /**
     * 查询访问量
     *
     * @param type
     * @return
     */
    List<LineReportVo> findReqSizeLineReport(Integer type, String month);

    /**
     * 转换成草稿的状态
     *
     * @param financeId
     */
    void convertToDraft(Integer financeId) throws SzException;

    /**
     * 查询财务报表的附件信息
     *
     * @param lineId
     * @param financeId
     * @throws SzException
     */
    List<String> findFinanceAccessory(Integer financeId, Integer lineId) throws SzException;


    /**
     * 查询审批数据
     *
     * @return
     */
    AuditTotalVo findAuditTotal(Integer areaType);

    /**
     * 查询公开的财务
     *
     * @param financePublicListReq
     * @return
     */
    List<FinanceAuditVo> findPublicFinanceList(FinancePublicListReq financePublicListReq);

    /**
     * 查询审核记录
     *
     * @return
     */
    List<AuditLogRecord> findAuditLogRecord(Integer id, Integer type);

    /**
     * 请求副本的信息
     *
     * @param financeId
     */
    void clearFb(Integer financeId, Integer financeType) throws SzException;

    /**
     * 提交副本的信息
     *
     * @param financeId
     * @throws SzException
     */
    void submitFb(Integer financeId) throws SzException;


    /**
     * 获取需要发送通知的数据
     *
     * @return
     */
    List<NotifyVo> findNotifyList() throws SzException;
}
